//
//  FXHomeController.swift
//  微博(Swift)
//
//  Created by V on 15/12/26.
//  Copyright © 2015年 V. All rights reserved.
//

import UIKit
import SVProgressHUD

class FXHomeController: FXVisitorTableViewController {
    
    // 懒加载 当前视图(tableView)对应的 视图模型（确保取到的模型是同一个模型）
    private lazy var statusListViewModel: FXStatusListViewModel = FXStatusListViewModel()
    // private lazy var statusViewModel: FXStatusViewModel = FXStatusViewModel()
    // 上啦刷新视图
    private lazy var pullUpView: UIActivityIndicatorView = {
        let indicator = UIActivityIndicatorView()
        indicator.activityIndicatorViewStyle = .WhiteLarge
        indicator.color = UIColor.cyanColor()
        
        indicator.sizeToFit()
        return indicator
    }()
    // 下啦刷新视图
    private lazy var fxrefreshControl: FXRefreshControl = FXRefreshControl()

    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        if userLogin == false {
            visitorView.setupInfo(nil, text: nil)
            return
        }
        setUpUI()
        loadData()
    }
    
    
    
    // 设置界面
    private func setUpUI(){
        navigationItem.leftBarButtonItem = UIBarButtonItem(imageName: "navigationbar_friendsearch", target: nil, action: "")
        navigationItem.rightBarButtonItem = UIBarButtonItem(imageName: "navigationbar_pop", target: self, action: "pop")
        setupTableView()
    }
    
    
    // 加载数据
    @objc private func loadData() {
        // 使用 MVVM 模式设计
        statusListViewModel.loadData(pullUpView.isAnimating()) {(isSuccessed) -> () in
            if isSuccessed {
                self.tableView.reloadData()
            }else{
                SVProgressHUD.showErrorWithStatus("请求数据失败")
            }
            self.endRefresh()
        }
    }
    
    
    // 设置TableView
    private let FXStatusCellID = "FXStatusCell_reuse"
    func setupTableView(){
        // 设置 tableView的背景颜色
        tableView.backgroundColor = UIColor(white: 0.97, alpha: 1)
        tableView.registerClass(FXStatusCell.self, forCellReuseIdentifier: FXStatusCellID)
        // 设置行高
        // 自动设置行高
//        tableView.rowHeight = 300
        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.estimatedRowHeight = 300
        // 取消分割线
        tableView.separatorStyle = .None
        // 取消选中状态
        tableView.tableFooterView = pullUpView
        // 添加系统的下啦刷新控件
        // refreshControl = UIRefreshControl()
        fxrefreshControl.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        // refreshControl?.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
        tableView.addSubview(fxrefreshControl)
    }
    
    
    // 二维码点击方法
    private func pop(){
    print("pop")
        let vc = FXTempViewController()
        navigationController?.pushViewController(vc, animated: true)
    }
}




// MARK: - tableView 的数据源方法
extension FXHomeController{
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.statuses?.count ?? 0
    }
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(FXStatusCellID, forIndexPath: indexPath) as! FXStatusCell
        // 设置数据
        cell.statusViewModel = statusListViewModel.statuses![indexPath.row]
        return cell
    }
    
    
    
    
    //    // 1. 先试用了这个方法，可以看到footerView，但是看不到菊花转
    //    override func tableView(tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) {
    //        pullUpView.startAnimating()
    //        print("加载数据")
    //    }
    
    // 2. 这个方法可以正常
    // 将要显示某一个 cell 的时候会回调这个方法
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        
        // 判断如果是将要显示最后一行cell 的话就去执行加载数据的操作
        if indexPath.row == statusListViewModel.statuses!.count - 1 && pullUpView.isAnimating() == false {
            print("去加载数据啦")
            // 开始动画
            pullUpView.startAnimating()
            // 加载数据
            loadData()
        }
    }
    
    
    // 结束刷新
    private func endRefresh() {
        pullUpView.stopAnimating()
        fxrefreshControl.endRefreshing()
    }

    
}



